Email has become an important method for communicating. Email systems typically include a server component (e.g., Microsoft Exchange Server) and a client component (e.g., Microsoft Outlook or Microsoft Outlook Express). These components are typically software applications that are configured to execute on computing devices (e.g., servers, PCs, laptops, and PDAs).
Some types of email servers are configured to allow email to be accessed via an Internet browser client (e.g., Microsoft Internet Explorer) rather than a dedicated email client. In these systems, the browser interacts with the email server, and any functions required to be performed on the client system are performed through the browser (e.g., by downloading Javascript) or through the use of Active Server Pages.
Since clients and servers are often connected by networks that have low bandwidth and high latency (e.g., slow dial-up connections), many email clients and servers are configured to store pending instructions and then send several instructions together. For example, instead of sending an open folder command and sending an open calendar command, a client may store the first instruction and combine it with second instruction and then send the two instructions together. This store, combine, and send scheme tends to allow a more efficient use of network and server resources, since there is some overhead associated with each transmission.
Some prior art systems have relied on a single buffer allocated at each of the client and at the server to act as a data store area for instructions and/or data that are waiting to be sent together. In one example of such a system, the client uses a buffer to store instructions and data that are to be sent to the server. Once the buffer is full or close to being full, the client sends the contents of the buffer to the server. The server stores the received contents into a buffer and begins parsing and executing the instructions. A pointer may be used to designate the next request to be serviced.
The server assembles its responses in its buffer, and ensures that the contents of its buffer do not exceed the size of a client buffer. If the server is unable to complete any requests in its buffer (e.g., because there is not enough room in the buffer), the server writes the uncompleted requests into the buffer and sends them back to the client with the completed responses.
In some systems, the client may be configured to specify how much memory the client is willing to allocate to its buffer. For example, the client may indicate to the server that only 32 KB will be devoted to its buffer. In response, the server will ensure that it does not send the client more than 32 KB at one time.
Given the low bandwidth and high latency nature of the connections used between many email clients and servers, a system and method for improving performance is needed.